package oj;

public class LC75{
    public void sortColors(int[] nums) {
        int len=nums.length;
        if(len<=1){
            return;
        }
        //[0...zero)=0
        //[zero...i)=1
        //[two...len-1]=2

        //为了保证初始化的时候[0...zero)为0,因此将zero设置为0
        //所以下面遍历到0的时候先交换，再加
        int zero=0;

        //为了保证初始化的时候[two...len-1]为0，因此将two设置为len
        //所以下面遍历到2的时候，先减再交换
        int two=len;
        int i=0;
        //当i=two时上面的三个区间就覆盖了全部数组
        //因此循环结束条件是i<two,退出循环时i正好等于two
        while (i<two){
            if(nums[i]==0){
                swap(nums,zero,i);
                zero++;
                i++;
            }else if(nums[i]==1){
                i++;
            }else {
                two--;
                //这个时候i不能++，因为这时交换到i位置的值还没有进行处理，所以要继续处理当前位置的值。
                swap(nums, two, i);
            }
        }
    }

    private void swap(int[] nums, int index1, int index2) {
        int tmp=nums[index1];;
        nums[index1]=nums[index2];
        nums[index2]=tmp;
    }
}
